package vg.services.graph_view_manager.interfaces.graph_view;

import java.util.Set;

public interface IHighLevelGraphEditor {
	/**
	 * This method makes marked vertices by invisible.
	 * Adds action to queue and returns control without execution of method. 
	 * 
	 * @param vertexIds
	 *          - marked vertices.
	 */
	public void setInvisibleVertices(Set<Integer> vertexIds);

	/**
	 * This method makes marked edges by invisible.
	 * Adds action to queue and returns control without execution of method. 
	 * 
	 * @param edgeIds
	 *          - marked edges.
	 */
	public void setInvisibleEdges(Set<Integer> edgeIds);

	/**
	 * This method makes marked all vertices by invisible, but vertices which
	 * place <b>vertexIds</b> array.
	 * Adds action to queue and returns control without execution of method. 
	 * 
	 * @param vertexIds
	 *          - marked vertices.
	 */
	public void setInvisibleAllVerticesBut(Set<Integer> vertexIds);

	/**
	 * This method makes marked edges by invisible, but edges which place
	 * Adds action to queue and returns control without execution of method.
	 *  
	 * <b>edgeIds</b> array.
	 * 
	 * @param edgeIds
	 *          - marked edges.
	 */
	public void setInvisibleAllEdgesBut(Set<Integer> edgeIds);
	
	/**
	 * This method shows attributes in vertexes and edges.
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void showAttributes(final Set<String> vertexAttr, final Set<String> edgeAttr);
	
	/**
	 * This method provide ability to select part of graph.
	 * Adds action to queue and returns control without execution of method. 
	 * 
	 * @param lvsids
	 *          list of vertex storableIds
	 * @param lesids
	 *          list of edge storableIds
	 */
	public void setSelectionElements(Set<Integer> lvsids, Set<Integer> lesids);

//=============================================================================
//-----------------Undo/Redo methods-------------------------------------------
	/**
	 * Undo method.
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void undo();
	
	/**
	 * Redo method.
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void redo();
	
//=============================================================================
//-----------------Layout------------------------------------------------------
	/**
	 * This method executes layout.
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void executeCurrentLayout();
	
//=============================================================================
//-----------------Panning-----------------------------------------------------
	/**
	 * Sets panning mode.
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void setPanning(boolean panning);

	/**
	 * Returns station of panning mode.
	 */
	public boolean isPanning();	
	
//=============================================================================
//-----------------Methods for scaling graph-----------------------------------
	/**
	 * This method increase scale of graph
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void zoomIn();

	/**
	 * This method decrease scale of graph
	 * Adds action to queue and returns control without execution of method. 
	 */
	public void zoomOut();

	/**
	 * Adds action to queue and returns control without execution of method. 
	 * This method set new scale to graph
	 */
//	public void setZoom(String scale);
	
	/**
     * This method enable/disable relationship between combobox and model scale
     * 
     * @param enable
     *          - if true then changing scaling in model change value in combobox
     * @param zoomCombo
     *          - combobox that should use for represent scale
     */
//    void setEnableZoomComboToGraphView(boolean enable, ZoomComboBox zoomCombo);
}
